package com.wh.msg.entity.base64;

import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;

/**
 * Commons Codec（简称“CC”）
 * Bouncy Castle（简称“BC”）
 * @author 谢泽鹏
 * @version V1.0
 * @Package com.wh.msg.entity
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2018
 */
public class Base64CoderCC {


    private static final String ENCODING = "UTF-8";

    /**
     * 一般Base64加密
     * @param data
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String encode(String data) throws UnsupportedEncodingException{
        byte[] encodedByte = Base64.encodeBase64(data.getBytes(ENCODING));
        return new String(encodedByte, ENCODING);
    }

    /**
     * 安全Base64加密
     * @param data
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String encodeSafe(String data) throws UnsupportedEncodingException{
        /*
         * 注意：这里采用的encodeBase64(byte[] bytes, boolean arg1)
         * arg1为true时，加密后的字符串每行为76个字符，不论每行够不够76个字符，都要在行尾添加“\r\n”
         */
        byte[] encodedByte = Base64.encodeBase64(data.getBytes(ENCODING),true);
        return new String(encodedByte, ENCODING);
    }

    /**
     * Base64解密
     * @param data
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String decode(String data) throws UnsupportedEncodingException{
        byte[] decodedByte = Base64.decodeBase64(data.getBytes(ENCODING));
        return new String(decodedByte, ENCODING);
    }

    /**
     * 测试
     * @param args
     * @throws UnsupportedEncodingException
     */
    public static void main(String[] args) throws UnsupportedEncodingException {
        /********************测试一般encode*********************/

        System.out.println("================================");
        String data = "☎☏✄☪☣☢☠♨« »큐〓㊚㊛囍㊒㊖☑✔☐☒✘㍿☯☰☷♥♠♤❤♂♀★☆☯✡※卍卐■找一个好姑娘@%#$^&*1234567890~`!?;:',.=+-\n\r做老婆是我的梦 想！";
        System.out.println("原文：" + data);
        String encodedStr = Base64CoderCC.encode(data);
        System.out.println("加密：" + encodedStr);
        String decodedStr = Base64CoderCC.decode(encodedStr);
        System.out.println("解密：" + decodedStr);
        System.out.println(data.equals(decodedStr));
        System.out.println("================================");

        System.out.println("");
        /********************测试安全encode*********************/
        System.out.println("================================");
        String data2 = "找一个好姑娘做老婆是我的梦 想！找一个好姑娘做老婆是我的梦 想！";
        System.out.println("原文：" + data2);
        String encodedStr2 = Base64CoderCC.encodeSafe(data2);
        System.out.println("加密：" + encodedStr2);
        String decodedStr2 = Base64CoderCC.decode(encodedStr2);
        System.out.println("解密：" + decodedStr2);
        System.out.println(data2.equals(decodedStr2));
        System.out.println("================================");
    }
}